package shape

import (
	"errors"
	"fmt"
)

// Rectangle 长方形构造体
type Rectangle struct {
	length float64 // 长度
	width  float64 // 宽度
}

// NewRectangle 创建一个长方形实例
func NewRectangle(length float64, width float64) (*Rectangle, error) {
	if length <= 0 || width <= 0 {
		return nil, errors.New("length and width must be positive")
	}
	return &Rectangle{length: length, width: width}, nil
}

// String 方法将 Rectangle 对象转换为字符串表示形式。
func (rectangle *Rectangle) String() string {
	return fmt.Sprintf("Rectangle: {length: %v, width: %v, area: %v}", rectangle.length, rectangle.width, rectangle.Area())
}

// Length 返回长方形的长度
func (rectangle *Rectangle) Length() float64 {
	return rectangle.length
}

// SetLength 设置长方形的长度
func (rectangle *Rectangle) SetLength(length float64) {
	rectangle.length = length
}

// Width 返回长方形的宽度
func (rectangle *Rectangle) Width() float64 {
	return rectangle.width
}

// SetWidth 设置长方形的宽度
func (rectangle *Rectangle) SetWidth(width float64) {
	rectangle.width = width
}

// Area 计算长方形的面积
func (rectangle *Rectangle) Area() float64 {
	return rectangle.length * rectangle.width
}
